package com.micro.monitoring;

import android.Manifest;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import com.ashokvarma.bottomnavigation.TextBadgeItem;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener, ViewPager.OnPageChangeListener {

    private NoScrollViewPager mViewPager;
    private BottomNavigationBar mBottomNavigationBar;
    private TextBadgeItem mTextBadgeItem; //添加角标
    private List<Fragment> mList; //ViewPager的数据源
    //是否需要检测后台定位权限，设置为true时，如果用户没有给予后台定位权限会弹窗提示
    private boolean needCheckBackLocation = false;
    //如果设置了target > 28，需要增加这个权限，否则不会弹出"始终允许"这个选择框
    private static String BACK_LOCATION_PERMISSION = "android.permission.ACCESS_BACKGROUND_LOCATION";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //todo permission request
//        if(Build.VERSION.SDK_INT > 28
//                && getApplicationContext().getApplicationInfo().targetSdkVersion > 28) {
//            needPermissions = new String[] {
//                    Manifest.permission.ACCESS_COARSE_LOCATION,
//                    Manifest.permission.ACCESS_FINE_LOCATION,
//                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
//                    Manifest.permission.READ_EXTERNAL_STORAGE,
//                    Manifest.permission.READ_PHONE_STATE,
//                    BACK_LOCATION_PERMISSION
//            };
//            needCheckBackLocation = true;
//        }
        initBottomNavigationBar();
		initViewPager();
    }

    //初始化ViewPager
    @SuppressLint("ClickableViewAccessibility")
	private void initViewPager() {
        mList = new ArrayList<>();
        mList.add(BlankFragment.newInstance("首页"));
        mList.add(BlankFragment.newInstance("发现"));
        mList.add(BlankFragment.newInstance("设置"));

        mViewPager = findViewById(R.id.view_pager);
        mViewPager.addOnPageChangeListener(this);
        FragmentAdapter fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(), mList);
        mViewPager.setAdapter(fragmentAdapter); //视图加载适配器
    }

    //初始化底部导航条
    private void initBottomNavigationBar() {
        mBottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
        mBottomNavigationBar.setTabSelectedListener(this);
        mBottomNavigationBar.setKeepScreenOn(false);
        mTextBadgeItem = new TextBadgeItem()
                .setHideOnSelect(true) //设置被选中时隐藏角标
                .setBackgroundColor(Color.RED)
                .setText("49");
        /**
         * 设置模式
         * 1、BottomNavigationBar.MODE_DEFAULT 默认
         * 如果Item的个数<=3就会使用MODE_FIXED模式，否则使用MODE_SHIFTING模式
         *
         * 2、BottomNavigationBar.MODE_FIXED 固定大小
         * 填充模式，未选中的Item会显示文字，没有换挡动画。
         *
         * 3、BottomNavigationBar.MODE_SHIFTING 不固定大小
         * 换挡模式，未选中的Item不会显示文字，选中的会显示文字。在切换的时候会有一个像换挡的动画
         */
        mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
        /**
         * 设置背景的样式
         * 1、BottomNavigationBar.BACKGROUND_STYLE_DEFAULT 默认
         * 如果设置的Mode为MODE_FIXED，将使用BACKGROUND_STYLE_STATIC 。
         * 如果Mode为MODE_SHIFTING将使用BACKGROUND_STYLE_RIPPLE。
         *
         * 2、BottomNavigationBar.BACKGROUND_STYLE_STATIC 导航条的背景色是白色，
         * 加上setBarBackgroundColor（）可以设置成你所需要的任何背景颜色
         * 点击的时候没有水波纹效果
         *
         * 3、BottomNavigationBar.BACKGROUND_STYLE_RIPPLE 导航条的背景色是你设置的处于选中状态的
         * Item的颜色（ActiveColor），也就是setActiveColorResource这个设置的颜色
         * 点击的时候有水波纹效果
         */
        mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
        //设置导航条背景颜色
        //在BACKGROUND_STYLE_STATIC下，表示整个容器的背景色。
        // 而在BACKGROUND_STYLE_RIPPLE下，表示选中Item的图标和文本颜色。默认 Color.WHITE
        mBottomNavigationBar.setBarBackgroundColor(R.color.home_background);
        //选中时的颜色,在BACKGROUND_STYLE_STATIC下，表示选中Item的图标和文本颜色。
        // 而在BACKGROUND_STYLE_RIPPLE下，表示整个容器的背景色。默认Theme's Primary Color
        //mBottomNavigationBar.setActiveColor(R.color.black);
        //未选中时的颜色，表示未选中Item中的图标和文本颜色。默认为 Color.LTGRAY
        //mBottomNavigationBar.setInActiveColor("#FFFFFF");


        mBottomNavigationBar.addItem(new BottomNavigationItem(R.drawable.home, "首页")
                .setActiveColorResource(R.color.person))
                .addItem(new BottomNavigationItem(R.drawable.grid, "发现")
                        .setActiveColorResource(R.color.person))
                .addItem(new BottomNavigationItem(R.drawable.person_2, "设置")
                        .setActiveColorResource(R.color.person).setBadgeItem(mTextBadgeItem))
                .setFirstSelectedPosition(0)
                .initialise(); //所有的设置需在调用该方法前完成

        //如果使用颜色的变化不足以展示一个选项Item的选中与非选中状态，
        // 可以使用BottomNavigationItem.setInActiveIcon()方法来设置。
//        new BottomNavigationItem(R.drawable.ic_home_black_24dp, "首页")//这里表示选中的图片
//                .setInactiveIcon(ContextCompat.getDrawable(this,R.mipmap.ic_launcher));//非选中的图片
    }

    @Override
    public void onTabSelected(int position) {
        //tab被选中
        mViewPager.setCurrentItem(position);
    }

    @Override
    public void onTabUnselected(int position) {

    }

    @Override
    public void onTabReselected(int position) {

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        //ViewPager滑动
        mBottomNavigationBar.selectTab(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }


//	/*************************************** 权限检查******************************************************/
//
//	/**
//	 * 需要进行检测的权限数组
//	 */
//	protected String[] needPermissions = {
//			Manifest.permission.ACCESS_COARSE_LOCATION,
//			Manifest.permission.ACCESS_FINE_LOCATION,
//			Manifest.permission.WRITE_EXTERNAL_STORAGE,
//			Manifest.permission.READ_EXTERNAL_STORAGE,
//			Manifest.permission.READ_PHONE_STATE,
//			BACK_LOCATION_PERMISSION
//	};
//
//	private static final int PERMISSON_REQUESTCODE = 0;
//
//	/**
//	 * 判断是否需要检测，防止不停的弹框
//	 */
//	private boolean isNeedCheck = true;
//
//	@Override
//	protected void onResume() {
//		try{
//			super.onResume();
//			if (Build.VERSION.SDK_INT >= 23) {
//				if (isNeedCheck) {
//					checkPermissions(needPermissions);
//				}
//			}
//		}catch(Throwable e){
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * @param
//	 * @since 2.5.0
//	 */
//	@TargetApi(23)
//	private void checkPermissions(String... permissions) {
//		try{
//			if (Build.VERSION.SDK_INT >= 23 && getApplicationInfo().targetSdkVersion >= 23) {
//				List<String> needRequestPermissonList = findDeniedPermissions(permissions);
//				if (null != needRequestPermissonList
//						&& needRequestPermissonList.size() > 0) {
//					try {
//						String[] array = needRequestPermissonList.toArray(new String[needRequestPermissonList.size()]);
//						Method method = getClass().getMethod("requestPermissions", new Class[]{String[].class, int.class});
//						method.invoke(this, array, 0);
//					} catch (Throwable e) {
//
//					}
//				}
//			}
//
//		}catch(Throwable e){
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * 获取权限集中需要申请权限的列表
//	 *
//	 * @param permissions
//	 * @return
//	 * @since 2.5.0
//	 */
//	@TargetApi(23)
//	private List<String> findDeniedPermissions(String[] permissions) {
//		try{
//			List<String> needRequestPermissonList = new ArrayList<String>();
//			if (Build.VERSION.SDK_INT >= 23 && getApplicationInfo().targetSdkVersion >= 23) {
//				for (String perm : permissions) {
//					if (checkMySelfPermission(perm) != PackageManager.PERMISSION_GRANTED
//							|| shouldShowMyRequestPermissionRationale(perm)) {
//						if(!needCheckBackLocation
//								&& BACK_LOCATION_PERMISSION.equals(perm)) {
//							continue;
//						}
//						needRequestPermissonList.add(perm);
//					}
//				}
//			}
//			return needRequestPermissonList;
//		}catch(Throwable e){
//			e.printStackTrace();
//		}
//		return null;
//	}
//
//	private int checkMySelfPermission(String perm) {
//		try {
//			Method method = getClass().getMethod("checkSelfPermission", new Class[]{String.class});
//			Integer permissionInt = (Integer) method.invoke(this, perm);
//			return permissionInt;
//		} catch (Throwable e) {
//		}
//		return -1;
//	}
//
//	private boolean shouldShowMyRequestPermissionRationale(String perm) {
//		try {
//			Method method = getClass().getMethod("shouldShowRequestPermissionRationale", new Class[]{String.class});
//			Boolean permissionInt = (Boolean) method.invoke(this, perm);
//			return permissionInt;
//		} catch (Throwable e) {
//		}
//		return false;
//	}
//
//	/**
//	 * 检测是否说有的权限都已经授权
//	 *
//	 * @param grantResults
//	 * @return
//	 * @since 2.5.0
//	 */
//	private boolean verifyPermissions(int[] grantResults) {
//		try{
//			for (int result : grantResults) {
//				if (result != PackageManager.PERMISSION_GRANTED) {
//					return false;
//				}
//			}
//		}catch(Throwable e){
//			e.printStackTrace();
//		}
//		return true;
//	}
//
//	@TargetApi(23)
//	public void onRequestPermissionsResult(int requestCode,
//										   String[] permissions, int[] paramArrayOfInt) {
//        super.onRequestPermissionsResult(requestCode, permissions, paramArrayOfInt);
//        try {
//            if (Build.VERSION.SDK_INT >= 23) {
//                if (requestCode == PERMISSON_REQUESTCODE) {
//                    if (!verifyPermissions(paramArrayOfInt)) {
//                        showMissingPermissionDialog();
//                        isNeedCheck = false;
//                    }
//                }
//            }
//        } catch (Throwable e) {
//            e.printStackTrace();
//        }
//    }
//
//	/**
//	 * 显示提示信息
//	 *
//	 * @since 2.5.0
//	 */
//	private void showMissingPermissionDialog() {
//	    BasicConfirmButtonDialog guideDialog=new BasicConfirmButtonDialog(this, "确定", "需求权限");
//        guideDialog.setClickListener(new BasicConfirmButtonDialog.BasicConfirmButtonDialogListener() {
//            @Override
//            public void onTvYesListener() {
//                startAppSettings();
//                guideDialog.cancel();
//            }
//        });
//        guideDialog.show();
//	}
//
//	/**
//	 * 启动应用的设置
//	 *
//	 * @since 2.5.0
//	 */
//	private void startAppSettings() {
//		try{
//			Intent intent = new Intent(
//					Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
//			intent.setData(Uri.parse("package:" + getPackageName()));
//			startActivity(intent);
//		} catch (Throwable e) {
//			e.printStackTrace();
//		}
//	}
}
